---
title: Contracts
summary: The DTO assembly shared between PdfAPI.Client and the PdfAPI it wraps.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-17
---

# Contracts

The request and response types used by `PdfClient` live in `PdfAPI.Core`, a single assembly referenced by **both** the client and the API. This page identifies that assembly and points to its canonical documentation; it does not restate its types.

| Field | Value |
| --- | --- |
| **Contracts assembly** | `PdfAPI.Core` |
| **Referenced by** | `PdfAPI.Client` and `PdfAPI` |
| **Shipped in this package** | Yes (`lib\net45\PdfAPI.Core.dll` and `src\PdfAPI.Core`) |
| **Documented by this run** | Yes |
| **Canonical documentation** | [PdfAPI.Core](../../libraries/pdfapi-core/index.md) |

`PdfAPI.Core` is also referenced by `Pdf.Local.Client` — a shared contracts assembly is evidence of a shared type vocabulary, never of client status; `Pdf.Local.Client` performs no HTTP and is not documented under `docs/clients/`.

## Types used by this client

The table lists only the contract types that appear on the public surface of `IPdfClient`/ `PdfClient`. Each type's fields, validation, and semantics are documented in the canonical set linked above.

| Type | Kind | Used as | Members that use it |
| --- | --- | --- | --- |
| [`ConvertRequest`](../../libraries/pdfapi-core/api/PdfAPI.Core/ConvertRequest.md) | Class | Request | [`Convert(ConvertRequest request)`](reference.md#convert-from-request) |
| [`MergeRequest`](../../libraries/pdfapi-core/api/PdfAPI.Core/MergeRequest.md) | Class | Request | [`Merge(MergeRequest request)`](reference.md#merge-documents) |
| [`PdfResult`](../../libraries/pdfapi-core/api/PdfAPI.Core/PdfResult.md) | Class | Response | [`Convert(ConvertRequest request)`](reference.md#convert-from-request), [`Convert(byte[] file, string fileExtension, PdfFormat format = PdfFormat.Pdf)`](reference.md#convert-from-file-bytes), [`Extract(DocumentRange range)`](reference.md#extract-page-range), [`Merge(MergeRequest request)`](reference.md#merge-documents) |
| [`PdfTrackingInfo`](../../libraries/pdfapi-core/api/PdfAPI.Core/PdfTrackingInfo.md) | Class | Response | [`Track(long trackingId)`](reference.md#track-request-status) |
| [`PdfFormat`](../../libraries/pdfapi-core/api/PdfAPI.Core/PdfFormat.md) | Enum | Request | [`Convert(byte[] file, string fileExtension, PdfFormat format = PdfFormat.Pdf)`](reference.md#convert-from-file-bytes) |
| [`DocumentRange`](../../libraries/pdfapi-core/api/PdfAPI.Core/DocumentRange.md) | Class | Request | [`Extract(DocumentRange range)`](reference.md#extract-page-range) |

## Versioning and drift

| Risk | Detail |
| --- | --- |
| Assembly shipped in this package | `PdfAPI.Core.dll` built alongside `PdfAPI.Client.dll` from the same repository and packed via `IncludeReferencedProjects: true` |
| Version consumed by the API | The API references the same in-repository `PdfAPI.Core` project |
| Drift consequence | A consumer resolving a different `PdfAPI.Core` than the API serializes against would see deserialization failures rather than compile errors — not observed as an active risk in this repository, since both the API and the client build from the same `PdfAPI.Core` project |

## Related documentation
- [Client index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Package](package.md)
- [Client reference](reference.md)
- [Endpoint map](endpoint-map.md)
- [Consumption](consumption.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Tech debt](tech-debt.md)

## Sources
- `PdfAPI.Client\PdfClient.cs`
- `PdfAPI.Client\IPdfClient.cs`
- `PdfAPI.Client\PdfAPI.Client.csproj`
- `PdfAPI.Core\ConvertRequest.cs`
- `PdfAPI.Core\MergeRequest.cs`
- `PdfAPI.Core\PdfResult.cs`
- `PdfAPI.Core\PdfTrackingInfo.cs`
- `PdfAPI.Core\PdfFormat.cs`
- `PdfAPI.Core\Extract\DocumentRange.cs`
